package com.crh.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.crh.dao.IGoodsCollectDao;
import com.crh.dao.IGoodsDao;

/**
 * 注册Dao工厂的单例
 *
 * @author chaui
 */
public class DaoFactory {

    private static IGoodsDao goodsDao = null;
    private static IGoodsCollectDao goodsCollectDao = null;
    private static DaoFactory instance = new DaoFactory();

    /**
     * 私有构造方法，工厂单例类的典型做法
     */
    private DaoFactory() {

        try {
            Properties prop = new Properties();
            // 加载配置文件
            InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("config/daoconfig.properties");
            prop.load(in);

            /*****************************
             * iGoodsDaoImplClass
             *******************************/

            // 利用键取出配置文件的值
            String iGoodsDaoImplClass = prop.getProperty("iGoodsDaoImplClass");
            // 利用Class.forname加载实现类,用类的名字获取一个Class的实例（通过类的反射机制）
            Class iGoodsDaoImplClazz = Class.forName(iGoodsDaoImplClass);
            // 获取当前类的实例
            goodsDao = (IGoodsDao) iGoodsDaoImplClazz.newInstance();

            /*********************************
             * iGoodsCollectDaoImplClass
             ************************************/
            // 利用键取出配置文件的值
            String iGoodsCollectDaoImplClass = prop.getProperty("iGoodsCollectDaoImplClass");
            // 利用Class.forname加载实现类,用类的名字获取一个Class的实例（Class包含类信息的类，在.class里面，编译的时候产生的）
            Class iGoodsCollectDaoImplClazz = Class.forName(iGoodsCollectDaoImplClass);
            // 获取当前类的实例
            goodsCollectDao = (IGoodsCollectDao) iGoodsCollectDaoImplClazz.newInstance();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            throw new ExceptionInInitializerError(e);
        }

    }

    public static IGoodsDao getGoodsDao() {
        return goodsDao;
    }

    public static IGoodsCollectDao getGoodsCollectDao() {
        return goodsCollectDao;
    }

    public static DaoFactory getInstance() {
        if (instance == null) {
            instance = new DaoFactory();
        }
        return instance;
    }
}
